package com.yy.micro.magic.ext.strategy.code;

import com.yy.micro.magic.core.annotation.Strategy;
import com.yy.micro.magic.core.model.RuntimeMetadata;
import com.yy.micro.magic.core.strategy.RuleStrategyAdapter;

import org.springframework.util.StringUtils;

import java.util.Map;

/**
 * 码表映射策略
 * format：指定码表名，根据value找到码表映射的目标值。
 * 如果没有指定码表名，则是动态码表映射，在Rule的properties中设置对应的映射。
 * 如果没有找到对应的码表映射，则返回value。
 */
@Strategy("codeMap")
public class CodeMapStrategy  extends RuleStrategyAdapter {

    @Override
    protected void process(final RuntimeMetadata metadata) {
        Object value = metadata.getInputValue();
        String codeName = metadata.getRule().getFormat();
        if (!StringUtils.isEmpty(codeName)){
            Object target = findCodeTargetValue(codeName,value);
            addResult(target);
        }else {
            Map<String,String> properties = metadata.getRule().getProperties();
            if (null != properties && properties.containsKey(value)){
                addResult( properties.get(value.toString()));
            }else {
                super.process(metadata);
            }
        }
    }
}
